Kundenfelder in BAPI-Struktur füllen
Das Befüllen von Kundeneigenen Feldern in einem BAPI stellt einen häufig vor Probleme. Ich stelle dir hier eine kurze Doku mit Beispielcoding vor, um Kundenfelder korrekt und beschwerdefrei übergeben zu können.
Als Beispiel verwenden ich den BAPI_SALESORDER_CREATEFROMDAT2 zum Anlegen von Kundenaufträgen.
Vorbedingung BAPE_VBAK
Alle kundeneigenen Felder, die mittels APPEND an die Kopfstruktur VBAK angehängt wurden, müssen ebenfalls in einem APPEND an die Struktur BAPE_VBAK appendiert werden. Hierbei ist es wichtig, dass die Felder zeichenartig sein müssen! Es dürfen also keine Felder vom Typ FLOAT, DEC oder INT verwendet werden! Entweder müssen diese Felder außen vor gelassen werden (sie können dann nicht mittels BAPI geändert werden), oder es muss ein eigenes zeichenartiges Datenelement speziell für den BAPI angelegt werden.
Beispiel
Die Umwandlung einer Struktur in einen “Container” braucht man immer, wenn man Kundenfelder in BAPIs verwenden möchte. In vielen BAPIs gibt es einen EXTENSION-Parameter, dem alle Kundenfelder übergeben werden. In diesem speziellen Fall ist es die Übergabetabelle EXTENSIONIN.
Die Anweisung zum Füllen der EXTENSIONIN sieht klassischerweise in etwa so aus:
DATA ls_bape_vbak TYPE bape_vbak.
DATA ls_extension TYPE bapiparex.
DATA lt_extensions TYPE STANDARD TABLE OF bapiparex.
ls_bape_vbak-zzfeld1 = '1'.
ls_bape_vbak-zzfeld2 = 'ABCD'.
ls_extension-structure = 'BAPE_VBAK'.
ls_extension+30(960) = ls_bape_vbak. "(bapiparex-valuepart1 - 4)
APPEND ls_extension TO lt_extensions.
Abgesehen davon, dass die Unterteilung der Kundenfelder in VALUEPART1 bis VALUEPART4 absoluter Schwachsinn ist, ist es unter Unicode nicht mehr einfach möglich, die Strukturen zuzuweisen. Im ABAP-Editor erhältst du dann die Meldung:
“LS_EXTENSION+30(960)” und “LS_BAPE_VBAK” sind in einem
Unicode-Programm nicht ineinander konvertierbar.
Casting notwendig
Entweder bedient man sich des Tricks mit dem X-Casting oder man verwendet die entsprechende Klasse von SAP: CL_ABAP_CONTAINER_UTILITIES.
Mit dieser Klasse – und speziell der Methode FILL_CONTAINER_C – ist es möglich, die typgerechte Umwandlung vorzunehmen.
cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = ls_bape_vbak
IMPORTING
ex_container = ls_extension+30(960)
EXCEPTIONS
illegal_parameter_type = 1
OTHERS = 2.
VBAKKOZ und VBAKKOZX
Damit die Verarbeitung letztendlich funktioniert, müssen die Strukturen VBAKKOZ und VBAKKOZX ebenfalls in gleicher Weise erweitert werden.
Hierbei ist es wichtig, dass die Felder die gleiche Struktur haben. Fehlt in der VBAKKOZX ein Feld, dann funktioniert die Übertragung der Daten nicht.
Gleiches gilt für die Felder der VBAP-Struktur.
SAP-Hinweis
Nützliche Informationen stehen in SAP-Hinweis 143580.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024